from django.core.files.storage import Storage
# 先导入我们安装的 fdfs_client.client 客户端
from fdfs_client.client import Fdfs_client
# 导入 settings 文件
from django.conf import settings

class FastDFSStorage(Storage):

    # 我们再添加一个新的方法
    # 该方法会在我们上传之前,判断文件名称是否冲突
    def exists(self, name):
        # 根据上面的图片我们可知,
        # fdfs 中的文件名是由 fdfs 生成的, 所以不可能冲突
        # 我们返回 False: 永不冲突
        return False

    def _save(self, name, content):
        '''重写上传文件的函数'''
        # 1 指定客户端
        client = Fdfs_client(settings.FDFS_CLIENT_CONF)
        # 2 上传文件 - 以文件内容的方式
        res = client.upload_by_buffer(content.read())
        # 3 判断上传的状态
        if res.get('Status') != 'Upload successed.':
            raise Exception('文件上传失败')
        # 4 返回图片名称
        file_id = res.get('Remote file_id')
        return file_id



    # 返回可访问到文件的完整的url地址
    # 我们知道, 保存成功后, 返回的图片是不完整的, 所以在这里拼接完整.
    def url(self, name):
        return settings.FDFS_URL + name
